package de.mnit.basis.swt.statisch;

import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.widgets.Display;

import de.mnit.basis.daten.struktur.gruppe.Gruppe2;
import de.mnit.basis.daten.struktur.tabelle.typ.TypTabelle2;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.swt.dnd.DNDTYP;

/**
 * @author Michael Nitsche
 * 29.09.2007	Erstellt
 *
 * TODO irgendwie besser lösen! Das mit der TypTab ist bescheiden!!!
 */
public class SWT_Zwischenablage {

	private static SWT_Zwischenablage instanz=null;
	private final Clipboard clipboard;


	private SWT_Zwischenablage() {
		this.clipboard=new Clipboard(Display.getDefault());
	}


	public static void setze(TypTabelle2<DNDTYP, Object> daten) {
		Fehler.zahl.wenn_ZuKlein(1, daten.gLaenge());
		TypTabelle2<Object,Transfer> tab=TypTabelle2.neu(Object.class, Transfer.class);
		for(Gruppe2<DNDTYP, Object> dat : daten)
			tab.plus(dat.g2(), dat.g1().transfer);
        i().clipboard.setContents(tab.gSpalte1().zuBereich(), tab.gSpalte2().zuBereich(Transfer.class));
	}

	/**
	 * Typen werden nach übergebener Reihenfolge priorisiert!
	 */
	public static Gruppe2<DNDTYP, Object> gib(DNDTYP... typen) {
		Fehler.zahl.wenn_ZuKlein(1, typen.length);
		for(DNDTYP typ : typen)
			for(TransferData td : i().clipboard.getAvailableTypes())
				if(typ.transfer.isSupportedType(td))
					return Gruppe2.neu(typ, i().clipboard.getContents(typ.transfer));
		return null;
	}


	private static SWT_Zwischenablage i() {
		if(instanz==null)
			instanz=new SWT_Zwischenablage();
		return instanz;
	}

}
